package main

import (
	"fmt"
	"io"
	"net"
	"os"
)

func recvFile(conn net.Conn, fileName string) {
	//按照文件名创建新文件
	file, err := os.Create(fileName)
	if err != nil {
		fmt.Printf("os.Create()函数执行错误，错误为:%v\n", err)
		return
	}
	defer file.Close()

	//从网络中读数据，写入本地文件
	for {
		buf := make([]byte, 4096)
		n, err := conn.Read(buf)

		//写入本地文件，读多少，写多少
		file.Write(buf[:n])
		if err != nil {
			if err == io.EOF {
				fmt.Printf("接收文件%s\n", fileName)
			} else {
				fmt.Printf("conn.Read()方法执行出错，错误为:%v\n", err)
			}
			return
		}
	}
}

// RecvFile 服务端接收文件
func RecvFile(conn net.Conn, fileName string) {
	defer conn.Close()

	//回写ok给发送端
	conn.Write([]byte("ok"))

	//获取文件内容
	recvFile(conn, fileName)
}

// func main() {

// 	//1.创建监听socket
// 	listener, err := net.Listen("tcp", "127.0.0.1:8000")
// 	if err != nil {
// 		fmt.Printf("net.Listen()函数执行错误，错误为:%v\n", err)
// 		return
// 	}
// 	defer listener.Close()

// 	for {
// 		//阻塞监听
// 		conn, err := listener.Accept()
// 		if err != nil {
// 			fmt.Printf("listener.Accept()方法执行错误，错误为:%v\n", err)
// 			return
// 		}

// 		go func(conn net.Conn) {
// 			RecvFile(conn)
// 		}(conn)
// 	}
// }
